# 1.需求：在列表中["apple", "banana", "orange", "pear"], 匹配apple和pear
# 2.需求：匹配出163、126和qq邮箱
# 3.匹配qq:10567这样的数据，提取出来qq文字和qq号码
# 4.需求：匹配出<html>hh</html>
# 5.需求：匹配出<html><h1>www.itcast.cn</h1></html>
# 6.需求：匹配出<html><h1>www.itcast.cn</h1></html>
import re

# 1.需求：在列表中["apple", "banana", "orange", "pear"], 匹配apple和pear
fruits = ["apple", "banana", "orange", "pear"]
for fruit in fruits:
    m = re.match('apple|pear', fruit)  # | 匹配左右任意一个表达式
    print(f"I like eat {fruit}") if m else print(f"I don't like eat {fruit}")

# 2.需求：匹配出163、126和qq邮箱
# | 匹配左右任意一个表达式
# (ab) 将括号中的表达式作为一个分组
# \ 转义字符
m = re.match(r"[a-zA-Z0-9_]{4,20}@(163|126|qq)\.com", "hello@163.com")
print(m.group()) if m else print("匹配失败")

# 3.匹配qq:10567这样的数据，提取出来qq文字和qq号码
# group() 和 group(0) 等价 提取整个符合正则的结果
# group(1) 第1个分组的结果
# group(2) 第2个分组的结果
# 分组编号是按照从左到右的顺序排序的
m = re.match(r"(qq):([1-9]\d{4,11})", "qq:10567")
print(m.group(), m.group(1), m.group(2)) if m else print("匹配失败")

# 4.需求：匹配出<html>hh</html>
# \num 引用分组num匹配到的字符串
m = re.match(r"<(html)>.*</\1>", "<html>hh</html>")
print(m.group()) if m else print("匹配失败")

# 5.需求：匹配出<html><h1>www.itcast.cn</h1></html>
m = re.match(r"<(html)><(h1)>.*</\2></\1>", "<html><h1>www.itcast.cn</h1></html>")
print(m.group()) if m else print("匹配失败")

# 6.需求：匹配出<html><h1>www.itcast.cn</h1></html>
# (?P<name>) 分组起别名
# (?P=name) 引用别名为name分组匹配到的字符串
m = re.match(r"<(?P<html>html)><(?P<h1>h1)>.*</(?P=h1)></(?P=html)>", "<html><h1>www.itcast.cn</h1></html>")
print(m.group()) if m else print("匹配失败")
